package cn.csc.framework.pay.core.client.impl.jh.util;

import cn.csc.framework.pay.core.client.impl.jh.JHPayClientConfig;
import cn.csc.framework.pay.core.client.impl.tl.util.SybUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 建行支付接口
 */
@Slf4j
public class JHPayService {
    private JHPayClientConfig config;


    public JHPayService(JHPayClientConfig config) {
        this.config = config;
    }

    /**
     * 微信统一支付接口
     * @param orderId 定单号
     * @param payment 付款金额
     * @param remark1
     * @param remark2
     * @param subAppId 小程序/公众号的APPID,当前调起支付的小程序/公众号APPID
     * @param openId 用户子标识,用户在小程序/公众号appid下的唯一标识，
     * @param clientIP 客户在商户系统中的IP，即客户登陆（访问）商户系统时使用的ip）
     * @param regInfo 客户在商户系统中注册的信息，中文需使用escape编码StringUtils.escapeJavaScript("客户")
     * @param proInfo 客户购买的商品中文需使用escape编码
     * @param referer 商户送空值即可；具体请看REFERER设置说明
     * @param tradeType 交易类型,JSAPI--公众号支付、MINIPRO--小程序
     * @return
     * @throws Exception
     */
    public Map<String, String> pay(String orderId, String payment, String remark1, String remark2,
                                   String clientIP, String regInfo, String proInfo,
                                   String referer,String tradeType,String subAppId,String openId) throws Exception {

        String MACStr="MERCHANTID="+config.getMerchantId()+"&POSID="+config.getPosId()+"&BRANCHID="+config.getBranchId()+"&ORDERID="+
                orderId+"&PAYMENT="+payment+"&CURCODE="+config.getCurCode()+"&TXCODE="+config.getTxCode()+"&REMARK1="+remark1+"&REMARK2="+remark2+
                "&TYPE="+config.getType()+"&PUB="+config.getPub()+"&GATEWAY="+config.getGateway()+"&CLIENTIP="+clientIP+"&REGINFO="+regInfo+
                "&PROINFO="+ StringUtils.escapeJavaScript(proInfo)+"&REFERER="+referer+"&TRADE_TYPE="+tradeType+"&SUB_APPID="+subAppId+"&SUB_OPENID="+openId;
        log.info("[JHPayService.pay]:MAC({})",MACStr);
        String MAC = SecureUtil.md5(MACStr);
        //拼接支付参数
        String param=MACStr+"&MAC="+MAC;
        log.info("[JHPayService.pay]:param({})",param);
        String responseResult =null;
        try {
            String responseText = HttpUtil.post(config.getUrl(),param);
            log.info("[JHPayService.pay]:response({})",responseText);
            JSONObject object=JSONObject.parseObject(responseText);
            String PAYURL= (String) object.get("PAYURL");

            responseResult = HttpUtil.post(PAYURL,"");
            log.info("[JHPayService.pay]:responseResult({})",responseResult);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return handleResult(responseResult);
    }
    public Map<String, String> handleResult(String result) throws Exception {
        Map map = SybUtil.json2Obj(result, Map.class);
        if (map == null) {
            map = new HashMap();
            map.put("retcode", "FAIL");
            map.put("errmsg", "返回数据为空,调用异常");
            map.put("trxstatus", "-99999");
            return map;
        }
        if (!"000000".equals(map.get("ERRCODE"))) {
            map.put("errmsg", map.get("ERRMSG"));
            map.put("trxstatus", "-99999");
            return map;
        }
        return map;
    }
}
